package cn.ad.server.web.spring.service.actions.context;//package cn.ad.server.web.spring.service.actions.context;
//
//import java.io.IOException;
//
//import javax.servlet.ServletInputStream;
//import javax.servlet.http.HttpServletRequest;
//import javax.servlet.http.HttpServletResponse;
//
//import org.slf4j.Logger;
//import org.slf4j.LoggerFactory;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.stereotype.Component;
//import org.springframework.util.StringUtils;
//
//import cn.ad.server.common.utils.BrowserUtils;
//import cn.ad.server.common.utils.IPUtils;
//import cn.ad.server.common.utils.StringUtil;
//import cn.falconnect.adserver.adapter.IAdServerLogger;
//import cn.falconnect.adserver.adapter.BidAdRequest;
//import cn.falconnect.adserver.adapter.BidAdResponse;
//import cn.falconnect.adserver.adapter.Exchange;
//import cn.falconnect.adserver.adapter.AdViewBidRequest;
//import cn.falconnect.adserver.adapter.AdViewBidResponse;
//import cn.falconnect.adserver.adapter.AdViewConnection;
//import cn.falconnect.adserver.adapter.AdViewImpression;
//import cn.falconnect.adserver.adapter.AdViewOperator;
//import cn.falconnect.adserver.adapter.App;
//import cn.falconnect.adserver.adapter.Bid;
//import cn.falconnect.adserver.adapter.Device;
//import cn.falconnect.adserver.adapter.Geo;
//import cn.falconnect.adserver.adapter.SeatBid;
//import cn.falconnect.adserver.adapter.User;
//import cn.ad.server.web.spring.service.actions.handler.adview.AdViewImpressionHandler;
//import cn.ad.server.biz.internal.AdService;
//import cn.ad.server.domain.IPDetail;
//import cn.ad.server.domain.ad.OS;
//import cn.ad.server.domain.enumration.Connection;
//import cn.ad.server.domain.enumration.Gender;
//import cn.ad.server.domain.enumration.MUniqueType;
//import cn.ad.server.domain.enumration.Operator;
//
///**
// * @author dongbin.yu
// * @from 2016-07-18
// * @since V1.0
// */
//@Component("adView")
//public class AdViewProcessor extends BidProcessor {
//
//	private static Logger logger = LoggerFactory.getLogger(AdViewProcessor.class);
//
//	@Autowired
//	private AdViewImpressionHandler adViewImpressionHandler;
//
//	@Autowired
//	private IAdServerLogger loggerService;
//
//	@Autowired
//	private AdService adService;
//
//	@Override
//	public BidAdRequest parse(HttpServletRequest request) {
//
//		AdViewBidRequest adViewBidRequest = null;
//		try (ServletInputStream inputStream = request.getInputStream()) {
//
//			adViewBidRequest = objectMapper.readValue(inputStream, AdViewBidRequest.class);
//		} catch (IOException e) {
//			// TODO 如果转换失败 日志记录转换异常
//			logger.error("adview parse failed", e);
//		}
//
//		return adViewBidRequest;
//	}
//
//	@Override
//	public BidAdResponse doProcess(HttpServletRequest request, HttpServletResponse response, BidAdRequest bidAdRequest,
//			BidContext bidContext) {
//
//		AdViewBidRequest adViewBidRequest = (AdViewBidRequest) bidAdRequest;
//		AdViewBidResponse adViewBidResponse = new AdViewBidResponse();
//
//		try {
//			// 处理参数解析异常的处理
//			if (bidContext == null) {
//				if (bidAdRequest != null) {
//					adViewBidResponse.setBidid(adViewBidRequest.getId());
//				}
//
//				// adViewBidResponse.setNbr(AdViewBidResponse.NOT_BID_REASON.INVALID_REQUEST.getValue());
//				return null;
//			}
//
//			adViewBidResponse.setId(adViewBidRequest.getId());
//
//			// 竞价方式
//			AdViewBidRequest.AT at = adViewBidRequest.getAt();
//
//			AdViewImpression[] impressions = adViewBidRequest.getImp();
//
//			SeatBid seatBid = new SeatBid();
//			adViewBidResponse.setSeatbid(new SeatBid[] { seatBid });
//			Bid[] bids = new Bid[impressions.length];
//			seatBid.setBid(bids);
//			for (int i = 0; i < impressions.length; i++) {
//
//				BidContext impBidContext = (BidContext) bidContext.clone();
//				Bid bid = new Bid();
//				bid.setImpid(impressions[i].getId());
//				try {
//					bids[i] = adViewImpressionHandler.handler(impressions[i], impBidContext);
//				} catch (Exception e) {
//					logger.error("AdViewProcessor doProcess ERROR", e);
//				} finally {
//					// 记录日志
//					loggerService.logAdBidRequest(impBidContext);
//				}
//
//			}
//
//			boolean hasBid = false;
//			for (Bid bid : bids) {
//				if (bid != null) {
//					hasBid = true;
//					break;
//				}
//			}
//
//			if (!hasBid) {
//				adViewBidResponse = null;
//			}
//
//		} catch (Exception e) {
//			throw e;
//		} finally {
//			adService.unbond();
//		}
//		return adViewBidResponse;
//
//	}
//
//	@Override
//	public BidContext initBidData(BidAdRequest bidAdRequest) {
//
//		BidContext bidContext = new BidContext();
//		if (bidAdRequest == null)
//			return null;
//		
//		bidContext.setAdxType(Integer.parseInt(Exchange.ADVIEW.getValue()));
//		bidContext.setRequestTimestamp(System.currentTimeMillis());
//		bidContext.setServerId(IPUtils.getHostName());
//
//		AdViewBidRequest adViewBidRequest = (AdViewBidRequest) bidAdRequest;
//		bidContext.setDebugMode(adViewBidRequest.isDebugMode());
//		bidContext.setFeeType(StringUtils.arrayToCommaDelimitedString(adViewBidRequest.getCur()));
//		bidContext.setTransactionType(adViewBidRequest.getAt().ordinal());
//		bidContext.setBidId(adViewBidRequest.getId());
//
//		// Device信息
//		Device device = adViewBidRequest.getDevice();
//		if (device != null) {
//
//			bidContext.setDnt(device.getDnt());
//			bidContext.setUa(device.getUa());
//			bidContext.setIp(device.getIp());
//			// 城市解析
//			IPDetail ipDetail = IPContext.instance().getIPDetail(IPUtils.convertIPToLong(bidContext.getIp()));
//			if (ipDetail != null) {
//				bidContext.setCountryId(ipDetail.getCountryId());
//				bidContext.setStateId(ipDetail.getStateId());
//				bidContext.setCityId(ipDetail.getCityId());
//				bidContext.setDistrictId(ipDetail.getDistrictId());
//			}
//			bidContext.setIdfa(device.getIdfa());
//			bidContext.setImeisha1(device.getDidsha1());
//			bidContext.setDpidsha1(device.getDpidsha1());
//			bidContext.setMacsha1(device.getMacsha1());
//			bidContext.setImeimd5(device.getDidmd5());
//			bidContext.setDpidmd5(device.getDpidmd5());
//			bidContext.setLanguage(device.getLanguage());
//			bidContext.setBrand(device.getMake());
//			bidContext.setModal(device.getModel());
//
//			boolean init = true;
//
//			if (StringUtils.hasText(device.getMacmd5())) {
//				bidContext.setMacmd5(device.getMacmd5());
//				if (init) {
//					bidContext.setMuniqueType(MUniqueType.MAC.getValue());
//					bidContext.setMuniqueId(device.getMacmd5());
//					init = false;
//				}
//			}
//
//			if (StringUtils.hasText(device.getMacsha1())) {
//				bidContext.setMacsha1(device.getMacsha1());
//				if (init) {
//					bidContext.setMuniqueType(MUniqueType.MAC.getValue());
//					bidContext.setMuniqueId(device.getMacsha1());
//					init = false;
//				}
//			}
//
//			if (StringUtils.hasText(device.getDidmd5())) {
//				bidContext.setImeimd5(device.getDidmd5());
//				if (init) {
//					bidContext.setMuniqueType(MUniqueType.IMEI.getValue());
//					bidContext.setMuniqueId(device.getDidmd5());
//					init = false;
//				}
//			}
//
//			if (StringUtils.hasText(device.getDidsha1())) {
//				bidContext.setImeisha1(device.getDidsha1());
//				if (init) {
//					bidContext.setMuniqueType(MUniqueType.IMEI.getValue());
//					bidContext.setMuniqueId(device.getDidsha1());
//					init = false;
//				}
//			}
//
//			if (StringUtils.hasText(device.getIdfa())) {
//				bidContext.setIdfa(device.getIdfa());
//				if (init) {
//					bidContext.setMuniqueType(MUniqueType.IDFA.getValue());
//					bidContext.setMuniqueId(device.getIdfa());
//					init = false;
//				}
//			}
//
//			// 操作系统
//			String os = device.getOs();
//			if (os != null) {
//				if (os.toLowerCase().contains("ios")) {
//					bidContext.setOs(OS.ios.getValue());
//				} else if (os.toLowerCase().contains("android")) {
//					bidContext.setOs(OS.android.getValue());
//				} else if (os.toLowerCase().contains("windows")) {
//					bidContext.setOs(OS.windows.getValue());
//				} else {
//					bidContext.setOs(OS.unknown.getValue());
//				}
//			}
//
//			bidContext.setOsVersion(device.getOsv());
//			bidContext.setJsEnable(device.getJs());
//			Connection connection = AdViewConnection.adViewConnectionMap.get(device.getConnectiontype());
//			if (connection != null) {
//				bidContext.setConnType(connection.getValue());
//			}
//			bidContext.setDeviceType(device.getDevicetype().ordinal());
//			bidContext.setScreenDensity(device.getS_density());
//			bidContext.setScreenWidth(device.getSw());
//			bidContext.setScreenHeight(device.getSh());
//			bidContext.setScreenOritent(device.getOrientation());
//			Operator operator = AdViewOperator.adViewOperatorMap.get(device.getCarrier());
//			if (operator != null) {
//				bidContext.setMobOps(operator.getValue());
//			}
//			Geo geo = device.getGeo();
//			if (geo != null) {
//				bidContext.setLatitude(geo.getLat());
//				bidContext.setLongitude(geo.getLon());
//			}
//		}
//
//		App app = adViewBidRequest.getApp();
//		if (app != null) {
//			bidContext.setAppId(app.getId());
//			bidContext.setAppName(app.getName());
//			// FIXME 需要做类型转换
//			bidContext.setAppType(StringUtil.arrayToCommaDelimitedString(app.getCat()));
//			bidContext.setAppDomain(app.getDomain());
//			bidContext.setAppVersion(app.getVer());
//			bidContext.setAppBundle(app.getBundle());
//			bidContext.setAppStoreUrl(app.getStoreurl());
//			bidContext.setAppKeywords(app.getKeywords());
//			bidContext.setAppIsPay(app.getPaid());
//		}
//
//		bidContext.setBrowser(BrowserUtils.getBrowser(bidContext.getUa()));
//		User user = adViewBidRequest.getUser();
//		if (user != null) {
//			bidContext.setUserId(user.getId());
//			// 用户性别
//			String gender = user.getGender();
//			if ("M".equals(gender)) {
//				bidContext.setGender(Gender.MALE.getValue());
//			} else if ("F".equals(gender)) {
//				bidContext.setGender(Gender.FEMALE.getValue());
//			} else {
//				bidContext.setGender(Gender.UNKNOWN.getValue());
//			}
//			bidContext.setInteresting(user.getKeywords());
//			bidContext.setAgeLow(user.getAge_low());
//			bidContext.setAgeHigh(user.getAge_high());
//		}
//
//		bidContext.setIncludeAdvertiser(StringUtils.arrayToCommaDelimitedString(adViewBidRequest.getWeat()));
//		bidContext.setExcludeIndustryCategory(StringUtils.arrayToCommaDelimitedString(adViewBidRequest.getBcat()));
//		bidContext.setExcludeAdvertiserDomain(StringUtils.arrayToCommaDelimitedString(adViewBidRequest.getBadv()));
//
//		return bidContext;
//	}
//	// =======
//	// private static Logger logger =
//	// LoggerFactory.getLogger(AdViewProcessor.class);
//	//
//	// @Autowired
//	// private ImpressionHandler impressionHandler;
//	//
//	// @Autowired
//	// private IAdServerLogger loggerService;
//	//
//	// @Override
//	// public BidAdRequest parse(HttpServletRequest request) {
//	// AdViewBidRequest adViewBidRequest = null;
//	// ServletInputStream inputStream = null;
//	// try {
//	// inputStream = request.getInputStream();
//	// adViewBidRequest = objectMapper.readValue(inputStream,
//	// AdViewBidRequest.class);
//	// } catch (IOException e) {
//	// // TODO 如果转换失败 日志记录转换异常
//	// logger.error("adview parse failed", e);
//	// } finally {
//	// if (inputStream != null) {
//	// try {
//	// inputStream.close();
//	// } catch (IOException e) {
//	// e.printStackTrace();
//	// }
//	// }
//	// }
//	//
//	// return adViewBidRequest;
//	// }
//	//
//	// @Override
//	// public BidResponse doProcess(HttpServletRequest request,
//	// HttpServletResponse response, BidAdRequest bidAdRequest,
//	// BidContext bidContext) {
//	//
//	// long s = System.currentTimeMillis();
//	//
//	// AdViewBidRequest adViewBidRequest = (AdViewBidRequest) bidAdRequest;
//	// AdViewBidResponse adViewBidResponse = new AdViewBidResponse();
//	//
//	// // 处理参数解析异常的处理
//	// if (bidContext == null) {
//	// if (bidAdRequest != null) {
//	// adViewBidResponse.setBidid(adViewBidRequest.getId());
//	// }
//	// return null;
//	// }
//	//
//	// adViewBidResponse.setId(adViewBidRequest.getId());
//	//
//	// // 竞价方式
//	// AdViewBidRequest.AT at = adViewBidRequest.getAt();
//	//
//	// AdViewImpression[] impressions = adViewBidRequest.getImp();
//	//
//	// SeatBid seatBid = new SeatBid();
//	// adViewBidResponse.setSeatbid(new SeatBid[] { seatBid });
//	// Bid[] bids = new Bid[impressions.length];
//	// seatBid.setBid(bids);
//	// for (int i = 0; i < impressions.length; i++) {
//	//
//	// BidContext impBidContext = (BidContext) bidContext.clone();
//	// Bid bid = new Bid();
//	// bid.setImpid(impressions[i].getId());
//	// try {
//	// bids[i] = impressionHandler.handler(impressions[i], impBidContext);
//	// } catch (Exception e) {
//	// logger.error("印象请求处理错误", e);
//	// } finally {
//	// // 记录日志
//	// loggerService.logAdBidRequest(impBidContext);
//	// }
//	//
//	// }
//	//
//	// boolean hasBid = false;
//	// for (Bid bid : bids) {
//	// if (bid != null) {
//	// hasBid = true;
//	// break;
//	// }
//	// }
//	// if (!hasBid) {
//	// adViewBidResponse = null;
//	// }
//	//
//	// return adViewBidResponse;
//	//
//	// }
//	//
//	// @Override
//	// public BidContext initBidData(BidAdRequest bidAdRequest) {
//	//
//	// BidContext bidContext = new BidContext();
//	// if (bidAdRequest == null)
//	// return null;
//	// bidContext.setAdxType(Integer.parseInt(Exchange.ADVIEW.getValue()));
//	// bidContext.setRequestTimestamp(System.currentTimeMillis());
//	// bidContext.setServerId(IPUtils.getHostName());
//	//
//	// AdViewBidRequest adViewBidRequest = (AdViewBidRequest) bidAdRequest;
//	// bidContext.setFeeType(StringUtils.arrayToCommaDelimitedString(adViewBidRequest.getCur()));
//	// bidContext.setTransactionType(adViewBidRequest.getAt().ordinal());
//	// bidContext.setBidId(adViewBidRequest.getId());
//	//
//	// // Device信息
//	// Device device = adViewBidRequest.getDevice();
//	// if (device != null) {
//	//
//	// bidContext.setDnt(device.getDnt());
//	// bidContext.setUa(device.getUa());
//	// bidContext.setIp(device.getIp());
//	// // 城市解析
//	// IPDetail ipDetail =
//	// IPContext.instance().getIPDetail(IPUtils.convertIPToLong(bidContext.getIp()));
//	// if (ipDetail != null) {
//	// bidContext.setCountryId(ipDetail.getCountryId());
//	// bidContext.setStateId(ipDetail.getStateId());
//	// bidContext.setCityId(ipDetail.getCityId());
//	// bidContext.setDistrictId(ipDetail.getDistrictId());
//	// }
//	// bidContext.setIdfa(device.getIdfa());
//	// bidContext.setImeisha1(device.getDidsha1());
//	// bidContext.setDpidsha1(device.getDpidsha1());
//	// bidContext.setMacsha1(device.getMacsha1());
//	// bidContext.setImeimd5(device.getDidmd5());
//	// bidContext.setDpidmd5(device.getDpidmd5());
//	// bidContext.setLanguage(device.getLanguage());
//	// bidContext.setBrand(device.getMake());
//	// bidContext.setModal(device.getModel());
//	//
//	// boolean init = true;
//	//
//	// if (StringUtils.hasText(device.getMacmd5())) {
//	// bidContext.setMacmd5(device.getMacmd5());
//	// if (init) {
//	// bidContext.setMuniqueType(MUniqueType.MAC.getValue());
//	// bidContext.setMuniqueId(device.getMacmd5());
//	// init = false;
//	// }
//	// }
//	//
//	// if (StringUtils.hasText(device.getMacsha1())) {
//	// bidContext.setMacsha1(device.getMacsha1());
//	// if (init) {
//	// bidContext.setMuniqueType(MUniqueType.MAC.getValue());
//	// bidContext.setMuniqueId(device.getMacsha1());
//	// init = false;
//	// }
//	// }
//	//
//	// if (StringUtils.hasText(device.getDidmd5())) {
//	// bidContext.setImeimd5(device.getDidmd5());
//	// if (init) {
//	// bidContext.setMuniqueType(MUniqueType.IMEI.getValue());
//	// bidContext.setMuniqueId(device.getDidmd5());
//	// init = false;
//	// }
//	// }
//	//
//	// if (StringUtils.hasText(device.getDidsha1())) {
//	// bidContext.setImeisha1(device.getDidsha1());
//	// if (init) {
//	// bidContext.setMuniqueType(MUniqueType.IMEI.getValue());
//	// bidContext.setMuniqueId(device.getDidsha1());
//	// init = false;
//	// }
//	// }
//	//
//	// if (StringUtils.hasText(device.getIdfa())) {
//	// bidContext.setIdfa(device.getIdfa());
//	// if (init) {
//	// bidContext.setMuniqueType(MUniqueType.IDFA.getValue());
//	// bidContext.setMuniqueId(device.getIdfa());
//	// init = false;
//	// }
//	// }
//	//
//	// // 操作系统
//	// String os = device.getOs();
//	// if (os != null) {
//	// if (os.toLowerCase().contains("ios")) {
//	// bidContext.setOs(OS.ios.getValue());
//	// } else if (os.toLowerCase().contains("android")) {
//	// bidContext.setOs(OS.android.getValue());
//	// } else if (os.toLowerCase().contains("windows")) {
//	// bidContext.setOs(OS.windows.getValue());
//	// } else {
//	// bidContext.setOs(OS.unknown.getValue());
//	// }
//	// }
//	//
//	// bidContext.setOsVersion(device.getOsv());
//	// bidContext.setJsEnable(device.getJs());
//	// Connection connection =
//	// AdViewConnection.adViewConnectionMap.get(device.getConnectiontype());
//	// if (connection != null) {
//	// bidContext.setConnType(connection.getValue());
//	// }
//	// bidContext.setDeviceType(device.getDevicetype().ordinal());
//	// bidContext.setScreenDensity(device.getS_density());
//	// bidContext.setScreenWidth(device.getSw());
//	// bidContext.setScreenHeight(device.getSh());
//	// bidContext.setScreenOritent(device.getOrientation());
//	// Operator operator =
//	// AdViewOperator.adViewOperatorMap.get(device.getCarrier());
//	// if (operator != null) {
//	// bidContext.setMobOps(operator.getValue());
//	// }
//	// Geo geo = device.getGeo();
//	// if (geo != null) {
//	// bidContext.setLatitude(geo.getLat());
//	// bidContext.setLongitude(geo.getLon());
//	// }
//	// }
//	//
//	// App app = adViewBidRequest.getApp();
//	// if (app != null) {
//	// bidContext.setAppId(app.getId());
//	// bidContext.setAppName(app.getName());
//	// // FIXME 需要做类型转换
//	// bidContext.setAppType(StringUtil.arrayToCommaDelimitedString(app.getCat()));
//	// bidContext.setAppDomain(app.getDomain());
//	// bidContext.setAppVersion(app.getVer());
//	// bidContext.setAppBundle(app.getBundle());
//	// bidContext.setAppStoreUrl(app.getStoreurl());
//	// bidContext.setAppKeywords(app.getKeywords());
//	// bidContext.setAppIsPay(app.getPaid());
//	// }
//	//
//	// bidContext.setBrowser(BrowserUtils.getBrowser(bidContext.getUa()));
//	// User user = adViewBidRequest.getUser();
//	// if (user != null) {
//	// bidContext.setUserId(user.getId());
//	// // 用户性别
//	// String gender = user.getGender();
//	// if ("M".equals(gender)) {
//	// bidContext.setGender(Gender.MALE.getValue());
//	// } else if ("F".equals(gender)) {
//	// bidContext.setGender(Gender.FEMALE.getValue());
//	// } else {
//	// bidContext.setGender(Gender.UNKNOWN.getValue());
//	// }
//	// bidContext.setInteresting(user.getKeywords());
//	// bidContext.setAgeLow(user.getAge_low());
//	// bidContext.setAgeHigh(user.getAge_high());
//	// }
//	//
//	// bidContext.setIncludeAdvertiser(StringUtils.arrayToCommaDelimitedString(adViewBidRequest.getWeat()));
//	// bidContext.setExcludeIndustryCategory(StringUtils.arrayToCommaDelimitedString(adViewBidRequest.getBcat()));
//	// bidContext.setExcludeAdvertiserDomain(StringUtils.arrayToCommaDelimitedString(adViewBidRequest.getBadv()));
//	//
//	// return bidContext;
//	// }
//	// >>>>>>> .merge_file_GmEBTM
//
//}
